//go:build ignore

// 求n的阶乘。至少使用递归函数完成一次
package main

import "fmt"

// 递归实现
func factorial_recursive(n uint) uint {
	if n == 0 || n == 1 {
		return 1
	}
	return n * factorial_recursive(n-1)
}

// 循环实现
func factorial_loop(n uint) uint {
	if n == 0 || n == 1 {
		return 1
	}
	var ret uint = 1
	for i := uint(2); i <= n; i++ {
		ret *= i
	}
	return ret
}

func main() {
	fmt.Println(factorial_recursive(10)) // 递归实现
	fmt.Println(factorial_loop(10))      // 循环实现
}

// 批改意见
// 阶乘需要考虑n<0时的异常情况